package com.qiaoba.api.system.service;

import com.qiaoba.api.system.entity.dto.SysUserDTO;
import com.qiaoba.api.system.entity.dto.UserResetPwdDTO;
import com.qiaoba.api.system.entity.dto.UserUpdateStatusDTO;
import com.qiaoba.api.system.entity.vo.SysUserVO;

import java.util.Date;

/**
 * 用户 对外暴露接口
 *
 * @author ailanyin
 * @date 2023-09-13 20:52:43
 */
public interface SysUserApiService {

    /**
     * 新增或更新用户
     *
     * @param dto      dto
     * @param isUpdate 是->更新
     * @return 结果
     */
    int saveOrUpdate(SysUserDTO dto, Boolean isUpdate);

    /**
     * 重置密码
     *
     * @param dto dto
     * @return 结果
     */
    int resetPwd(UserResetPwdDTO dto);

    /**
     * 更改状态
     *
     * @param dto dto
     * @return 结果
     */
    int updateStatus(UserUpdateStatusDTO dto);

    /**
     * 删除用户
     *
     * @param userId 用户ID
     * @return 结果
     */
    int deleteById(String userId);

    /**
     * 检查是否允许新增或修改
     *
     * @param dto dto
     */
    void checkAllowAddOrUpdate(SysUserDTO dto);

    /**
     * 根据登陆账号查询用户
     *
     * @param username    登陆账号
     * @param hasPassword 是否需要密码
     * @return 用户VO
     */
    SysUserVO selectVoByUsername(String username, boolean hasPassword);

    /**
     * 更新最后登陆IP和登陆时间
     *
     * @param userId    用户ID
     * @param ip        IP地址
     * @param loginTime 登陆时间
     */
    void updateLastLoginInfo(String userId, String ip, Date loginTime);
}
